﻿

using System;
using System.IO;

namespace Demo.Infrastructure.IO
{
    /// <summary>
    /// 文件工具
    /// </summary>
    public  class FileUtils
    {
        /// <summary>
        /// 文件全路径
        /// </summary>
        public string FilePath { get; set; }
        
        /// <summary>
        /// 是否存在
        /// </summary>
        public bool IsExists
        {
            get
            {
                return File.Exists(FilePath);
            }
        }

        /// <summary>
        /// 读取文件所有字符，最后关闭文件
        /// </summary>
        /// <returns></returns>
        public string ReadAll()
        {
            return IsExists ? File.ReadAllText(FilePath) : string.Empty;
        }

        /// <summary>
        /// 读取文件所有行
        /// </summary>
        /// <returns></returns>
        public string ReadLine()
        {
            return IsExists ? File.OpenText(FilePath).ReadLine() : string.Empty;
        }

        /// <summary>
        /// 读取文件所有行，最后关闭文件
        /// </summary>
        /// <returns></returns>
        public string[] ReadAllLines()
        {
            return IsExists ? File.ReadAllLines(FilePath) : new string[0];
        }

        /// <summary>
        /// 追加内容至文本 文件不存在则创建在追加，最后关闭文件
        /// </summary>
        /// <param name="contents">追加的内容</param>
        public void AppendText(string contents)
        {
            File.AppendAllText(FilePath, contents);
        }

        /// <summary>
        /// 追加内容至文本 文件不存在则创建在追加，最后关闭文件
        /// </summary>
        /// <param name="contents">追加的内容</param>
        public void AppendLines(string[] contents)
        {
            if (!IsExists)
                File.WriteAllText(FilePath, "");
            File.AppendAllLines(FilePath, contents);
        }

        /// <summary>
        /// 写内容之文件 文件存在则覆盖，最后关闭文件
        /// </summary>
        /// <param name="contents">追加的内容</param>
        public void Write(string contents)
        {
                File.WriteAllText(FilePath, contents);
        }

        /// <summary>
        /// 获取FileUtils实例
        /// </summary>
        public static FileUtils GetInstance(string filePath = null)
        {
            var fileUtil = new FileUtils();
            if (!string.IsNullOrEmpty(filePath))
                fileUtil.FilePath = filePath;
            return fileUtil;
        }
    }
}
